#ifndef APLATCOULEUR_HPP
#define APLATCOULEUR_HPP

#include "Materiau.hpp"

/** Classe qui implémente un matériau à couleur unique et uniforme.
 *
 * Cette classe implémente le matériau le plus simple : il est
 * uniquement défini par ses paramètres de surface et une couleur. Le
 * nom est tiré de la technique de l'aplat (ou à-plat) de couleur.
 *
 * @author Johan "Solo" Luisier
 * @date 18 Février 2013
 */
class AplatCouleur : public Materiau
{
public:
  /** Constructeur par défaut.
   *
   * Ce constructeur permet de définir une instance d'AplatCouleur
   * sans bruit.
   *
   * @param[in] ref coefficient de réflexion.
   * @param[in] trans coefficient de transparence.
   * @param[in[ indice indice de réfraction.
   * @param[in] reg coefficient de diffusion.
   * @param[in] c couleur de l'instance.
   */
  AplatCouleur( const double& refl = 0., const double& trans = 0.,
		const double& indice = 1., const double& reg = 0.,
		const Couleur& c = Couleur( 0u, 0u, 0u ) );
  /** Constructeur complet.
   *
   * Ce constructeur permet de définir une instance d'AplatCouleur
   * avec du bruit sur la normale.
   *
   * @param[in] ref coefficient de réflexion.
   * @param[in] trans coefficient de transparence.
   * @param[in[ indice indice de réfraction.
   * @param[in] reg coefficient de diffusion.
   * @param[in] bruit coefficient de bruit sur la normale au point.
   * @param[in] c couleur de l'instance.
   */
  AplatCouleur( const double& refl, const double& trans, const double& indice,
		const double& reg, const double& bruit,
		const Couleur& c );
  /** Le destructeur n'a rien de spécial à faire.
   */
  virtual ~AplatCouleur();
  /** Permet d'obtenir la couleur de l'instance.
   *
   * Quel que soit le point, la couleur renvoyée est la même.
   *
   * @return la valeur de ValeurCouleur.
   */
  Couleur couleur( const Coord & );
protected:
  /** Couleur de l'instance. En tout point du solide cette valeur est
   * la même.
   */
  Couleur ValeurCouleur;
};

#endif // APLATCOULEUR_HPP
